﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using CastleDefender.ConfigFolder;

namespace CastleDefender.Object.Items
{
    public partial class Items : DrawableGameComponent
    {
        #region VARIABLE

        protected List<Item> lstItems;
        protected List<Texture2D> lstTextureSupItems;
        protected List<Texture2D> lstTextureStupidItems;
        protected int intWidthFrames;
        protected int intHeightFrames;
        protected Rectangle recGameBounds;
        protected TimeSpan tsTimeCreateNewItem;
        protected Random radRandomItems;
        protected int intAmountStupidItem;

        #endregion

        #region CONSTRUCTOR

        public Items(Game myGame, ref List<Texture2D> textureSupItems, ref List<Texture2D> textureStupidItems,
            int widthFrames, int heightFrames, Rectangle gameBounds)
            : base(myGame)
        {
            intWidthFrames = widthFrames;
            intHeightFrames = heightFrames;
            recGameBounds = gameBounds;
            lstItems = new List<Item>();
            lstTextureSupItems = textureSupItems;
            lstTextureStupidItems = textureStupidItems;
            intAmountStupidItem = Config.ItemMaxStupidItem;
            radRandomItems = new Random();
        }
        #endregion

        #region PUBLIC METHOD

        public override void Update(GameTime gameTime)
        {
             tsTimeCreateNewItem += gameTime.ElapsedGameTime;
            if (tsTimeCreateNewItem >= TimeSpan.FromSeconds(Config.ItemTimeSpanCreateNewItem))
            {
                tsTimeCreateNewItem -= TimeSpan.FromSeconds(Config.ItemTimeSpanCreateNewItem);
                //Tạo mới 1 vật phẩm sau 1 khoảng thời gian nhất định 
                CreateNewItem();
            }

            for (int i = 0; i < lstItems.Count; i++)
            {
                lstItems[i].Update(gameTime);
                
                //Xóa vật phẩm đã được kích hoạt
                if (!lstItems[i].Visible)
                {
                    lstItems.RemoveAt(i);
                }
            }
            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime)
        {
            for (int i = 0; i < lstItems.Count; i++)
            {
                lstItems[i].Draw(gameTime);
            }

            base.Draw(gameTime);
        }

        #endregion

        #region PRIVATE METHOD

        //Tạo một vật phẩm 
        private void CreateNewItem()
        {
            int type = 0;
            bool sup;
            Texture2D ttTextureItem;
            int intRandom = radRandomItems.Next(100);

            //Ngẫu nhiên loại vật phẩm, nếu chỉ số ngẫu nhiên nhỏ hơn 3 và số lượng vật phẩm cản trở vẫn còn
            if (intRandom < Config.ItemRateStupidItem && intAmountStupidItem > 0)
            {
                type = radRandomItems.Next(1000) % lstTextureStupidItems.Count;
                ttTextureItem = lstTextureStupidItems[type];
                sup = false;
                intAmountStupidItem--;
            }
            else
            {
                type = radRandomItems.Next(1000) % lstTextureSupItems.Count;
                ttTextureItem = lstTextureSupItems[type];
                sup = true;
            }

            //Ngẫu nhiên tọa độ rơi của vật phẩm
            Vector2 posItem = new Vector2(radRandomItems.Next(recGameBounds.Width - intWidthFrames), -intHeightFrames);
            Item newItem = new Item(Game, ref ttTextureItem, intWidthFrames, intHeightFrames, posItem, sup, type, radRandomItems.Next(100) % 7 + 2, recGameBounds);
            lstItems.Add(newItem);
        }

        #endregion

        #region PUBLIC PROPERTIES

        //Nhận trả giá trị lstItems
        public List<Item> ListItems
        {
            get { return lstItems; }
            set { lstItems = value; }
        }

        #endregion

        

    }
}
